package com.tender.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.tender.service.FlowLimitService;

import java.util.concurrent.TimeUnit;

/**
 * Sentinel 流控服务对应的 Controller
 */
@RestController
public class RateLimitController {

    @Autowired
    private FlowLimitService flowLimitService;

    @GetMapping("/testA")
    public String testA() {
        return "==========> testA";
    }

    @GetMapping("/testB")
    public String testB() {
        return "==========> testB";
    }

    @GetMapping("/testC")
    public String testC() {
        flowLimitService.common();
        return "==========> testC";
    }

    @GetMapping("/testD")
    public String testD() {
        flowLimitService.common();
        return "==========> testD";
    }

    /**
     * 流控效果---排队等待
     */
    @GetMapping("/testE")
    public String testE() {
        System.out.println(System.currentTimeMillis() + "      testE，流控效果---排队等待---");
        return "==========> testE";
    }

    /**
     * 新增熔断规则-慢调用比率
     *
     * 后台服务暂停了1s，都不满足200ms 接口就满足的RT 要求，所以每一次访问都是慢请求。
     * 通过 Jmeter 1s 内发送10个线程，这会导致立马进入 熔断状态。
     */
    @GetMapping("/testF")
    public String testF() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("------测试：新增熔断规则-慢调用比率");
        return "==========> testF 新增熔断规则-慢调用比率";
    }

    @GetMapping("/testG")
    public String testG() {
        System.out.println("------测试：新增熔断规则-异常比率");
        throw new RuntimeException("模拟异常");
    }

}
